perm filename TSERVO.FAI[VV,BGB] blob
sn#133449 filedate 1974-12-02 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ENTRY TSERVO, CALPOT, CALSTP,CALLEN, NXTLEN, CALSER
C00004 00003 COUNTERS
C00006 00004 OPDEF LAC[MOVE]↔OPDEF DAC[MOVEM]↔OPDEF GO[JRST]
C00009 00005 AFTER GETTING RATIO WITH REFERENCE
C00012 00006 LAC 11,LENS MIGHT BE CHANGED BY PDP10
C00015 00007 SERVO CONTROL ROUTINES
C00016 ENDMK
C⊗;
ENTRY TSERVO, CALPOT, CALSTP,CALLEN, NXTLEN, CALSER
TITLE TSERVO ROUTINE
STAT←17 ;STATUS AC
RELAY←16 ;NEW RELAY BITS AC
OREL←15 ;OLD RELAY BITS AC
;REGISTERS AVAILABLE TO USER
STATUS↑: 0 ;STATUS BITS
LENS↑: 0 ;LENS NUMBER (-1 TO CHANGE TO NEXT LENS)
P1↑:0↔ P2↑:0↔ P3↑:0 ;LATEST POT READINGS - FOCUS,TILT,PAN.
CREF↑: 0 ;REFERENCE VOLTAGE
L1:0↔ L2:0↔ L3:0 ;FINAL POT VALUES
E1:40↔ E2:100↔ E3:100 ;TOLERENCES
;REGISTERS FOR INTERNAL USE ONLY
X1:0↔ X2:0↔ X3:0 ;PREVIOUS POT READINGS
;RELAY BITS FOR INCREASING AND DEPOT READINGS
UP: 1B22 ↔ 1B19 ↔ 1B20 ;INCREASE POT: FOCUS FAR - TILT DOWN - PAN LEFT (CCW).
DOWN: 1B23 ↔ 1B18 ↔ 1B21 ;DECREASE POT: FOCUS NEAR - TILT UP - PAN RIGHT (CW).
TEST: 3B23 ↔ 3B19 ↔ 3B21 ;RELAY BITS: FOCUS - TILT - PAN.
;COUNTERS
LCTR: 0 ;LENS COUNT
FCTR: 0 ;FOCUS COUNT
TCTR: 0 ;TILT COUNT
PCTR: 0 ;PAN COUNT
GCTR: 0 ;GENERAL COUNT
DCTR: 0 ;LENS DELAY COUNT
LBITS: 0 ;LAST RELAY BITS
LLENS: 0 ;LAST LENS NUMBER SEEN
;COUNTER MAXIMUMS;
DEL: 200 ;COUNTER FOR HUNG A-D
MISSD: 25 ;DATA MISSED COUNT
CNTR: =120 ↔ =40 ↔ =40 ;SERVO STOP COUNTER MAX: FOCUS,TILT,PAN.
WCNTR: =100 ;LENS DELAY COUNTER
LCNTR: =240 ;LENS STOP MAX
GCNTR: =2200 ;GENERAL COUNTER MAX
;BITS IN STATUS WORD
DONE←←1 ;ALL ACTIONS COMPLETED (OR ERROR OCCURED)
RUN←←2 ;TSERVO RUNNING
READ←←4 ;POT READ REQUEST
SERVO←←10 ;POT SERVO REQUEST
XXLENS←←20 ;LENS CHANGE REQUEST
LREAD←←40 ;LENS READ REQUEST
MISS←←100 ;DATA MISSED ERROR
ADH←←200 ;AD HUNG ERROR
LHANG←←400 ;LENS TIMED OUT ERROR
FHANG←←1000 ;FOCUS "
THANG←←2000 ;TILT "
PHANG←←4000 ;PAN "
GHANG←←10000 ;GENERAL "
CONFL←←100000 ;CONFLICT FLAG
NCONF←←200000 ;CONFLICT THIS TICK - INTERNAL FLAG ONLY
LRUN←←400000 ;LENS RUN BIT - " " "
SHANG: FHANG ↔ THANG ↔ PHANG
XLENS←←4000 ;LENS RELAY BIT
AD←←424 ;AD DEVICE NUMBER
DATA←←204 ;136 DEVICE NUMBER
MISC←←700 ;KLUDGE BAY DEVICE NUMBER
TUR←←600 ;LENS INPUT DEVICE NUMBER
REL←←40 ;RELAY REGISTER SELECT
OPDEF LAC[MOVE]↔OPDEF DAC[MOVEM]↔OPDEF GO[JRST]
;START OF SPACE WAR CODE.
TSERVO: LAC STAT,STATUS↔LAC OREL,LBITS ;LOAD REGISTERS.
SETZM RELAY ;CLEAR NEW RELAY BITS
DAC 3,SAVE3# ;SAVE TICK COUNTER
IORI STAT,RUN ;SET RUN BIT
TRNE STAT,DONE↔GO COUT ;DONE BIT SET - IDLE UNTIL STOPPED
TRZ STAT,MISS!ADH!GHANG!LHANG!PHANG!THANG!FHANG!NCONF
;CLEAR ERROR BITS
AOS 1,GCTR ;INDEX GENERAL COUNT
CAMLE 1,GCNTR
GO [ IORI STAT,GHANG ;SPW GENERAL TIME OUT ERROR
GO DOUT]
TRNN STAT,READ!SERVO↔GO NOPOT ;NO POT READING OR SERVOING REQUESTED
FOO: CONI DATA,4 ;CHECK FOR CONFLICTS
ANDI 4,7
JUMPN 4,[IORI STAT,CONFL!NCONF
GO NOPOT]
LAC 11,[IOWD 3,5] ;IOWD TO STORE READINGS
LAC 4,MISSD ;SET DATA MISSED COUNT
TURNON: CONO DATA,4250 ;TURN ON 136
CONO AD,172030 ;TURN ON A-D
LL1: LAC 3,DEL ;SET DEVICE HUNG COUNT
CONSO DATA,1000 ;WAIT FOR 136 DONE
SOJGE 3,.-1 ;AND COUNT DOWN
JUMPL 3,[IORI STAT,ADH ;HUNG AD, SET ERROR BIT
CONO AD,4000↔GO DOUT] ;AND TURN OFF
CONSZ DATA,10000 ;TEST FOR DATA MISSED
GO [ CONO AD,4000
SOJG 4,[ ;AND COUNT DOWN
MOVEI 3,12
LL2: SOJGE 3,LL2
GO TURNON]
IORI STAT,MISS ;LIMIT REACHED - SET ERROR BIT
CONO AD,4000 ;MISSED - TURN OFF
GO DOUT]
BLKI DATA,11 ;READ IN POTS
SKIPA↔GO LL1
CONO AD,4000 ;STOP A-D
ASH 7,-=24 ;UNPACK REFERENCE
LAC 10,7↔FSC 10,233
ASHC 5,-=24 ;UNPACK AND STORE READINGS
LSH 6,1↔ASHC 6,-=24
;AFTER GETTING RATIO WITH REFERENCE
LSH 7,1↔ASH 7,-=24
FSC 5,233↔FSC 6,233↔FSC 7,233
FDVR 5,10↔FDVR 6,10↔FDVR 7,10
LAC 11,[XWD 5,P1]↔BLT 11,CREF
TRNN STAT,SERVO↔GO NOPOT↔MOVEI 1,2 ;NO POT SERVO REQUESTED
LOOP: LAC 2,P1(1)↔FSBR 2,L1(1) ;DIFFERENCE WITH FINAL READING
TDNN OREL,TEST(1)↔GO NOMOT ;TEST IF THIS MOTOR WAS ON
LAC 3,P1(1)↔FSBR 3,X1(1)↔MOVMS 3 ;YES - DIFFERENCE WITH LAST READING
FMPR 3,CREF↔FSBR 3,E1(1)↔JUMPLE 3,.+4 ;TEST ACTUAL READING FOR DO DACENT.
SETOM FCTR(1)↔LAC 3,P1(1)↔DAC 3,X1(1) ;MOVING? CLR CNT AND UPDATE LAST READING
AOS 3,FCTR(1) ;INCREMENT
CAMLE 3,CNTR(1) ;AND TEST FOR MAX
GO[IOR STAT,SHANG(1)↔GO DOUT] ;SET HUNG BITS FOR PROPER MOTOR
NOMOT: MOVM 3,2↔FMPR 3,CREF↔SUB 3,E1(1) ;TEST FOR NEAR FINAL READING
JUMPGE 3,[SKIPL 2↔ IOR RELAY,UP(1) ;NO - SET RELAY BITS
SKIPGE 2↔IOR RELAY,DOWN(1)↔GO .+1]
SOJGE 1,LOOP ;AND RETURN FOR NEXT READING
TRNN RELAY,770000
TRZ STAT,SERVO ;CLEAR SERVO REQUEST BIT IF DONE
NOPOT: TRNN STAT,XXLENS!LREAD↔GO OUT ;NO LENS CHANGE OR READING REQUESTED
CONI TUR,10↔LSH 10,-=13↔ANDI 10,3 ;WHICH LENS IS UP
TRNN STAT,XXLENS↔GO[DAC 10,LENS↔GO OUT] ;READ ONLY ? STORE AND EXIT.
LAC 11,LENS ;MIGHT BE CHANGED BY PDP10
SKIPGE 11↔LAC 11,LENTAB(10) ;FIRST TIME THROUGH AND NEXT LENS WANTED
ANDI 11,3↔DAC 11,LENS ;MAKE SURE HONEST OR WE LOOP
CAMN 10,LENS ;REQUESTED LENS IS UP
GO [ AOS 12,DCTR ;YES - INCREMENT DELAY COUNT
CAML 12,WCNTR ;AND TEST FOR END OF WAIT
TRZ STAT,LENS!LRUN↔GO OUT] ;YES - CLEAR LENS CHANGE BIT
CAMN 10,LLENS↔GO [ ;SAME LENS ?
AOS 1,LCTR↔CAMGE 1,LCNTR↔GO .+3 ;HUNG COUNT.
IORI STAT,LHANG↔GO DOUT] ;LENS HUNG.
DAC 10,LLENS ;LENS CHANGED - UPDATE
SETZM LCTR ;AND CLEAR COUNT
IORI RELAY,XLENS ;SET RELAY BIT FOR LENS MOTOR
IORI STAT,LRUN ;AND STATUS BIT
OUT: TRNN RELAY,XLENS!770000 ;TEST FOR ANY RELAY BITS ON
GO[TRNE STAT,NCONF!LRUN↔GO .+1 ;OR CONFLICT BIT SET FOR THIS TICK
GO DOUT] ;NONE - WE ARE FINISHED
SKIPL SAVE3↔GO AOUT ;CHECK TICK COUNT
GO BOUT ;TURN OFF MOTOR - WE ARE GOING TO BE SHUFFLED
;EXITS FROM SERVO ROUTINE
DOUT: ORI STAT,DONE ;DONE EXIT - OK OR ERROR
TRZ STAT,LRUN ;CLEAR INTERNAL BITS
COUT: SETZM LCTR ;EXIT WHEN IDLING
LAC 1,[XWD LCTR,LCTR+1];CLEAR COUNTERS, ETC
BLT 1,LLENS
BOUT: SETZM RELAY↔SETZM FCTR ;SHUFFLE EXIT - TURN OFF ALL MOTORS
SETZM PCTR↔SETZM TCTR
AOUT: DAC RELAY,LBITS ;NORMAL EXIT - STORE RELAY BITS
TRZ STAT,NCONF ;CLEAR MORE INTERNAL BITS
DAC STAT,STATUS ;STORE STATUS
CONO MISC,REL(RELAY) ;SET RELAY REGISTER TO START MOTORS
DISMIS
LENTAB: OCT 1,3,2,0 ;LENS NUMBER TABLE
;SERVO CONTROL ROUTINES
CALSER: SKIPN CALFLG# ;READ POTS FIRST TIME
SKIPA 1,[READ] ;SERVO TO INITIAL POSITION THEREAFTER
MOVEI 1,SERVO↔DAC 1,STATUS
PUSH 17,[.+2]↔GO SPWRUN
SKIPE CALFLG↔POPJ 17,
LAC 1,[XWD P1,L1]↔BLT 1,L3
SETOM CALFLG
POPJ 17,
NXTLEN: MOVEI 1,XXLENS↔SETOM LENS↔GO SPWRUN-1 ;NEXT LENS ROUTINE.
CALPOT: MOVEI 1,READ↔GO SPWRUN-1 ;READ POTS
CALLEN: SKIPA 1,[LREAD] ;READ LENS
CALSTP: MOVEI 1,DONE↔DAC 1,STATUS ;STOP MOTORS
SPWRUN: SPCWAR 0,636367↔SPCWAR 1,TSERVO
SETCM 1,STATUS
TRNE 1,DONE!RUN↔GO .-2
SPCWAR 0,636367↔POPJ 17,
END